package com.liming.product.client;

import com.liming.common.pojo.dto.PageDTO;
import com.liming.common.pojo.dto.product.AddBrandDTO;
import com.liming.common.pojo.dto.product.UpdateBrandDTO;
import com.liming.common.pojo.vo.PageVO;
import com.liming.common.pojo.vo.product.BrandVO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.cloud.openfeign.SpringQueryMap;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @author liming
 * @date 2025/1/15
 */
@FeignClient(value = "product-service", contextId = "brandClient", path = "/service/brand")
public interface BrandClient {

    /**
     * 查询精选的品牌
     *
     * @return 精选品牌列表
     */
    @GetMapping(value = "selected", produces = MediaType.APPLICATION_JSON_VALUE)
    List<BrandVO> selectedBrand();

    /**
     * 品牌分页
     *
     * @param pageDTO 分页对象
     * @param name    品牌名称
     * @return 品牌分页信息
     */
    @GetMapping(produces = MediaType.APPLICATION_JSON_VALUE)
    PageVO<BrandVO> page(@SpringQueryMap PageDTO pageDTO, @RequestParam String name);

    /**
     * 品牌信息
     *
     * @param id 品牌ID
     * @return 品牌信息
     */
    @GetMapping(value = "{id}", produces = MediaType.APPLICATION_JSON_VALUE)
    BrandVO get(@PathVariable Long id);

    /**
     * 新增品牌
     *
     * @param dto 新增品牌信息
     * @return 是否新增成功
     */
    @PostMapping(consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
    Boolean add(@RequestBody AddBrandDTO dto);

    /**
     * 更新品牌
     *
     * @param updateBrandDTO 更新品牌信息
     * @return 是否更新成功
     */
    @PutMapping(consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
    Boolean update(@RequestBody UpdateBrandDTO updateBrandDTO);

    /**
     * 删除品牌
     *
     * @param id 品牌ID
     * @return 是否删除成功
     */
    @DeleteMapping(value = "{id}", produces = MediaType.APPLICATION_JSON_VALUE)
    Boolean delete(@PathVariable Long id);

    /**
     * 修改品牌 是否精选
     *
     * @param id 品牌id
     * @return 是否修改成功
     */
    @PutMapping(value = "selected/{id}", produces = MediaType.APPLICATION_JSON_VALUE)
    Boolean updateSelectedById(@PathVariable Long id);
}
